package com.haodai.agency.utils;

import android.util.Base64;


import com.haodai.agency.application.MyApplication;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.spec.AlgorithmParameterSpec;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

/**
 * Created by fanday on 2017/3/23.
 * aes加密处理工具文件
 */
public class AESCrypt {


    private Cipher cipher=null;
    private SecretKeySpec key=null;
    private AlgorithmParameterSpec spec;
    public static final String SEED_16_CHARACTER = "秘钥";
    private static AESCrypt instance;
    public static AESCrypt getInstance(){
        if(instance==null)
            instance=new AESCrypt();
        return instance;
    }
    private AESCrypt() {
        // hash password with SHA-256 and crop the output to 128-bit for key
        MessageDigest digest = null;
        try {
            digest = MessageDigest.getInstance("SHA-256");
            digest.update(SEED_16_CHARACTER.getBytes("UTF-8"));
            byte[] keyBytes = new byte[32];
            System.arraycopy(digest.digest(), 0, keyBytes, 0, keyBytes.length);
            cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
            key = new SecretKeySpec(keyBytes, "AES");
            spec = getIV();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public AlgorithmParameterSpec getIV() {
		//iv值
        byte[] iv = {0x2A,0x42,0x7D};
        IvParameterSpec ivParameterSpec;
        ivParameterSpec = new IvParameterSpec(iv);
        return ivParameterSpec;
    }
    //加密
    public String encrypt(String plainText) {
        String encryptedText="";
        try{
            cipher.init(Cipher.ENCRYPT_MODE, key, spec);
            byte[] encrypted = cipher.doFinal(plainText.getBytes("UTF-8"));
            encryptedText = new String(Base64.encode(encrypted,
                    Base64.DEFAULT), "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return encryptedText;
    }
    //解密
    public String decrypt(String cryptedText){
        String decryptedText="";
        try{
            cipher.init(Cipher.DECRYPT_MODE, key, spec);
            byte[] bytes = Base64.decode(cryptedText, Base64.DEFAULT);
            byte[] decrypted = cipher.doFinal(bytes);
            decryptedText= new String(decrypted, "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return decryptedText;
    }

}
